大家好,我是遊戲王怪獸之決鬥小編威斯~~丁,想必大家都知道遊戲王的貝卡斯的千年眼可以看到每個人的心靈....心靈透視~~~
差不多是這樣子垃....別問我這監測服務有名字嗎,他叫哇~沒錯 就只有哇(WAR,Weisting ActuatoR)
一樣的道理,無論您開發何種服務系統,必定都會遇到障礙排除(Trouble SHOOOOOOOTING)問題,來跟我唸一次,你也只剩看到我再發文文章一天了,TROOOOOUBLE SHOOOOOOTING,好拉,此時您除了透過Log跟程式碼進行解析臭蟲(Bug)外,勢必需要監視這套系統,看到所有問題,才可以順利解決,今天小編就帶給大家一套Spring Actuator服務監測套件,這套件不僅可以取代我們早期的JConsole監測套件,而且還可以透過應用程式接口(API)進行與其他系統介接,透過此項套件,在新的時代來臨,小編的思想是這樣,沒有舊技術這句話,只要你覺得好用,並且馬上學以致用,這就是新技術,所以小編在今日選用前端框架Vue及圖形設計框架Vuetify,並整合入此套監測套件,這套是近期蠻盛行的,頗多神級人物都用來監測Spring Cloud Eureka,但這居多透過JMX拉,我很難解釋,只能看後年,為什麼是後年,因爲明年不確定因素太多,哎~不過,真的有點潮,等一下讓小編帶妳潮一下,不潮不用錢,我是小編,我是貝卡斯,下面讓小編來介紹Actuator運作原理與支援內容吧。
Spring Actuator中所有端口都是透過@Endpoint進行標注個類別為一個監測終端點的Bean,並透過@ReadOperation進行註記監測方法位置,所有的終端點(@EndPoint)都是透過配置類別(EndpointWebMvcManagementContextConfiguration)中定義的EndpointHandlerMapping進行映射處理達成的,故此BeansEndpoint皆透過EndpointAutoConfiguration進行注入IOC容器,在這邊可以看出,終端點(@EndPoint)功能相當於Spring中的控制器(@RestController),透過AbstractWebMvcEndpointHandlerMapping.initHandlerMethods中把所有終端點(@EndPoint)配製成符合規範的結構,並注入至HandlerMapping集合中,便可完成所有監測項目端點API結構的生成與配置。
目前Spring Actuator支援兩種協定,第一、JMX(Java Management Extensions,Java管理擴充)協定,有如小編最初運用的監控套件JConsole,將各種需要監測的物件包裝成代管Bean(MBean,Managed Bean),透過JMX及RMI(Remote Method Invocation)進行監測與管理,第二種為透過TCP/IP Web API進行監測,為上敘透過@EndPoint進行配置各項監測API服務。
以下為預測的所有監測API,提供給各位開發者參考
No | Web API |
---|---|
1 | /actuator/beans |
2 | /actuator/caches |
3 | /actuator/health |
4 | /actuator/info |
5 | /actuator/conditions |
6 | /actuator/shutdown |
7 | /actuator/configprops |
8 | /actuator/env |
9 | /actuator/loggers |
10 | /actuator/heapdump |
11 | /actuator/threaddump |
12 | /actuator/metrics |
13 | /actuator/scheduledtasks |
14 | /actuator/mappings |
並透過增加de.codecentric:spring-boot-admin-starter-server 存儲庫套件,可看到Spring 內建的圖形化介面,但官方套件目前尚有部分問題,沒辦法看得很仔細。 | |
故我們運用此範例來開發一個微服務監測圖形化網頁功能,提供給各位做參考,以下為我們運用@EndPoint客製化一個終端點監測服務,如程式碼所敘,終端點位置不可與其他預設的終點重複,並將其終端點名稱配置於@EndPoint Bean 中的id,並配置回傳的監測值方法編譯在@ReadOperation標注的方法中,
@Component
@Endpoint(id = "memory")
public class ActuatorMontorController {
Runtime runtime = Runtime.getRuntime();
@ReadOperation
public Map<String, Object> getData() {
Map<String, Object> map = new HashMap<>();
map.put("available-processors", runtime.availableProcessors());
map.put("free-memory", runtime.freeMemory());
map.put("max-memory", runtime.maxMemory());
map.put("total-memory", runtime.totalMemory());
return map;
}
}
透過以上的原理敘述,各位開發者可以透過各類API取得監測資訊,或自行定義客製化的終端點監測內容。
所有的終端點(@Endpoint)皆是透過WebMvcEndpointManagementContextConfiguration中的webEndpointServletHandlerMapping進行過濾與獲取相關的Bean,透過WebEndpointSupplier分析器中createEndpointBean方法中進行取得BeanFactoryUtils元件,並觸發其beanNamesFOrAnnotationincludingAncestors方法取得專案中所有標注Endpoind註解的類別,最後透過WebMvcEndpointHandlerMapping中的EndpointLinksResolver進行配製成規範的API接口格式。
以下Spring Actuator為小編透過進行整合開發的GUI,提供各位讀者參考。
- /actuator/info,透過組態設定檔(application-.properties)中進行配置actuator資訊,Prefix為info.app.
- 整合客製化終端口 /actuator/memory GUI頁面,監測系統的記憶體使用情況
- 整合客製化中端口 /actuator/beans GUI頁面,監測系統啟動所有Singleton或Prototype的Bean元件資訊。有沒有看到,這種卡片形式Data table,在小編看十幾套以來,這套最潮,我一定要說一下,不錯!真的好用!看看我佛心來的免費推薦加叩叮。這個最適合用來闡述一個後端類別,是不是很合適啊!
- 整合客製化中端口 /actuator/health GUI頁面,監測服務狀態(Service Status)、記憶體狀態(Memory Status)及連通狀態(Ping status)此三項運作狀態。
- 整合客製化中端口 /actuator/metrics GUI頁面,監測系統服務各項指標。如:HTTP、JVM、LOGBACK、PROCESS、SYSTEM及TOMCAT等各項指標。由於JSON結構複雜,小編就採用TAB架構敘述所有群組資訊,主要都用來呈現JVM內部健康程度。
由於範例整合頁面過多,程式碼在範例中,各位開發者可透過Follow up進行測試引用。
Run dev/stag/prod environment application without JAR file
1. gradle bootRun -D profile=dev
2. gradle bootRun -D profile=stag
3. gradle bootRun -D profile=prod
Original spring actuator monitor website,
http://localhost:8080/sea/applications
See as raw data shown as below.
http://localhost:8080/sea/actuator
Step-1 : CD to spring-actuator-monitor folder
cd spring-actuator-monitor
Step-2 : Install node modules
yarn install
Step-3 : Run DEV with 8081
yarn run dev
Step-4 : Open your browser with page
Good luck all, kick back and relax it. weisting .
day-29-spring-framework-Actuator
spring boot actuator工作原理之http服务暴露源码分析
SpringBoot Actuator端点的实现原理【概括整理】